home *** CD-ROM | disk | FTP | other *** search
- 0 REM ********************************
- 1 REM * *
- 2 REM * VECTOR GRAPHICS PLOTTER V1 *
- 3 REM * FOR SUPER EXPANDER *
- 4 REM * AND/OR 1520 PLOTTER *
- 5 REM * *
- 6 REM * ADAPTED FROM AN OLD PUBLIC *
- 7 REM * DOMAIN PROGRAM BY *
- 8 REM * *
- 9 REM * ANDRE TAPANES *
- 10 REM * 71521,2563 *
- 11 REM * *
- 12 REM ********************************
- 13 GOSUB4000:POKE53280,0:POKE53281,0
- 14 INPUT" PLOTTER";PL$
- 15 IFPL$="Y"THENPL=1:GOTO17
- 16 PL=0
- 17 (null)END 1,"[147]GRAPHIC0"+CHR$(13)
- 18 (null)END 3,"[147]GRAPHIC2"+CHR$(13)
- 20 INPUT" DISPLAY POINT VALUES";PV$
- 21 IFPV$="Y"THENPV=1:GOTO23
- 22 PV=0
- 23 INPUT" SUPER EXPANDER CARTRIDGE";SE$
- 24 IFSE$="Y"THENSE=1:GOTO26
- 25 SE=0
- 26 IFSE=0ANDPL=0THEN:PRINT"[147]NO OUTPUT DEVICE NO NEED TO RUN PROGRAM":END
- 27 IF PL=1THEN:PRINT" COLOR TO USE IN PLOTTER":GOTO29
- 28 GOTO31
- 29 IF PL=1THEN:INPUT" 0= BLACK [146] 1=BLUE 2=GREEN 3=RED[154]";PN%
- 30 IFPN%>3ORPN%<0THENPN%=0
- 31 IFPL=1THEN:OPEN1,6,1:OPEN2,6,2:OPEN4,6,4
- 32 GOSUB2000
- 40 REM
- 50 REM
- 130 REM
- 140 REM DATA FOR OBJECTS
- 150 REM FIRST NUMBER IS # OF POINTS
- 160 REM THEN COME THE POINTS (X,Y,Z)
- 170 REM OBJECT DATA ENDS WITH -1
- 180 REM
- 190 DATA 5,-100,200,100,100,200,100
- 200 DATA 100,0,100,-100,0,100,-100,200,100,0
- 210 DATA 5,-100,200,300,100,200,300
- 220 DATA 100,0,300,-100,0,300,-100,200,300,0
- 230 DATA2,-100,200,100,-100,200,300,0
- 240 DATA2,100,200,100,100,200,300,0
- 250 DATA2,100,0,100,100,0,300,0
- 260 DATA2,-100,0,100,-100,0,300,0
- 270 DATA 5,-150,-10,50,400,-10,50
- 280 DATA 400,-10,1000,-150,-10,1000,-150,-10,50,1
- 290 DATA5,-250,-10,50,-750,-10,50
- 300 DATA -750,-10,1000,-250,-10,1000,-250,-10,50,2
- 310 DATA5,-150,-10,-50,400,-10,-50
- 320 DATA400,-10,-850,-150,-10,-850,-150,-10,-50,3
- 330 DATA5,-250,-10,-50,-750,-10,-50
- 340 DATA-750,-10,-850,-250,-10,-850,-250,-10,-50,2
- 350 DATA5,-600,400,750,-275,400,750
- 360 DATA-275,0,750,-600,0,750,-600,400,750,2
- 370 DATA5,-600,400,950,-275,400,950
- 380 DATA-275,0,950,-600,0,950,-600,400,950,2
- 390 DATA2,-600,400,750,-600,400,950,1
- 400 DATA2,-275,400,750,-275,400,950,1
- 410 DATA2,-275,0,750,-275,0,950,1
- 420 DATA2,-600,0,750,-600,0,950,1
- 430 DATA-1
- 440 DIMX(5),Y(5),Z(5),C(8),T(16)
- 450 IFSE=1ANDS1=2THENS1=0:(null)NEXT0
- 451 PRINT" LOCATION?(X,Y,Z) X=600 Y=600 Z=1000"
- 460 INPUTX(3),Y(3),Z(3)
- 465 ZZ=Z:Z(3)=-Z(3):XX=X:X(3)=-X(3):YY=Y:Y(3)=-Y(3)
- 470 PRINT" (P)ITCH,(B)ANK,(H)DING P=-35 B=0 H=225"
- 480 INPUTP,B,H
- 482 PP=P:P=-P:BB=B:B=-B
- 485 GOSUB5000
- 490 GOSUB740:REM SET UP MATRIX
- 500 IFPL=1THEN:PRINT#1,"M",0,0:PRINT#1,"D",479,0
- 505 IF PL=1THEN:PRINT#1,"M",0,479:PRINT#1,"D",479,479
- 510 RESTORE
- 520 READ Q:REM GET NUMBER OF POINTS
- 530 IFQ=-1THEN660
- 540 READX5,Y5,Z5
- 550 X(5)=X5:Y(5)=Y5:Z(5)=Z5
- 560 FOR P=2TOQ
- 570 X(1)=X5:Y(1)=Y5:Z(1)=Z5
- 580 READX5,Y5,Z5
- 590 X(5)=X5:Y(5)=Y5:Z(5)=Z5
- 600 GOSUB 840:REM TRANSLATE,ROTATE POINTS
- 610 GOSUB 920:REM CLIP LINES
- 620 GOSUB 1460:REM PROJECT LINES
- 630 GOSUB 700
- 640 NEXT:READPN%:REM GOSUB2000
- 650 GOTO520
- 660 IFPL=1THEN:PRINT#1,"M",0,0
- 665 GETA$:IFA$=""THEN665
- 671 IFA$="2"THENS1=2:GOTO450
- 672 IFA$="1"THEN:GOTO3000
- 675 GOTO665
- 690 IFPL=1THEN:PN%=2:GOSUB2000:PRINT#4:PRINT#4:PRINT#4,"X=";X ;" Y=";Y ;" Z=";Z
- 691 IFPL=1THEN:PRINT#4,"PITCH=";PP;" BANK=";BB;" HDNG=";HH
- 692 IFSE=1THEN:(null)LET3,4,0,"X="+STR$(XX)+" Y="+STR$(YY)+" Z="+STR$(ZZ),0
- 693 IFSE=1THEN:(null)LET2,4,1,"PITCH="+STR$(PP)+" BANK="+STR$(BB)+" HDNG="+STR$(HH),0
- 700 IFP2=0THENRETURN
- 710 GOSUB 1580
- 720 RETURN
- 730 REM
- 740 DE=(null)/180:CP=COS(P*DE):SP=SIN(P*DE)
- 750 CB=COS(B*DE):SB=SIN(B*DE):CH=COS(H*DE):SH=SIN(H*DE)
- 760 A1=CH*CB+SH*SP*SB:B1=-CH*SB+SH*SP*CB
- 770 C1=SH*CP:D1=CP*SB:E1=CP*CB:F1=-SP:G1=-SH*CB+CH*SP*SB
- 780 H1=SH*SB+CH*SP:I1=CH*CP
- 790 T(1)=A1:T(2)=B1:T(3)=C1:T(5)=D1:T(6)=E1:T(7)=F1:T(9)=G1:T(10)=H1:T(11)=I1
- 800 T(13)=X(3)*A1+Y(3)*D1+Z(3)*G1
- 810 T(14)=X(3)*B1+Y(3)*E1+Z(3)*H1
- 820 T(15)=X(3)*C1+Y(3)*F1+Z(3)*I1
- 830 RETURN
- 840 FORA=1TO5STEP4
- 850 G=X(A)
- 860 H=Y(A)
- 870 X(A)=G*T(1)+H*T(5)+Z(A)*T(9)+T(13)
- 880 Y(A)=G*T(2)+H*T(6)+Z(A)*T(10)+T(14)
- 890 Z(A)=G*T(3)+H*T(7)+Z(A)*T(11)+T(15)
- 900 NEXT
- 910 RETURN
- 920 FOR A=1TO5STEP4
- 930 C(A)=0
- 940 C(A+1)=0
- 950 C(A+2)=0
- 960 C(A+3)=0
- 970 IFX(A)<-Z(A)THENC(A)=1
- 980 IFX(A)>Z(A)THENC(A+1)=1
- 990 IFY(A)<-Z(A)THENC(A+2)=1
- 1000 IFY(A)>Z(A)THENC(A+3)=1
- 1010 NEXT
- 1020 FOR A=1TO4
- 1030 IFC(A)=0THEN1050
- 1040 IFC(A)=C(A+4)THEN1140
- 1050 NEXT
- 1060 FOR A=1TO4
- 1070 IFC(A)=1THEN1160
- 1080 NEXT
- 1090 FOR A=5TO8
- 1100 IFC(A)=1THEN1190
- 1110 NEXT
- 1120 P2=1
- 1130 RETURN
- 1140 P2=0
- 1150 RETURN
- 1160 A=1
- 1170 B=5
- 1180 GOTO1210
- 1190 A=5
- 1200 B=1
- 1210 IFC(A)=1THEN1310
- 1220 IFC(A+1)=1THEN1260
- 1230 IFC(A+2)=1THEN1360
- 1240 IFC(A+3)=1THEN1410
- 1250 GOTO1120
- 1260 K=(Z(A)-X(A))/(X(B)-X(A)-Z(B)+Z(A))
- 1270 X(A)=K*(Z(B)-Z(A))+Z(A)
- 1280 Y(A)=K*(Y(B)-Y(A))+Y(A)
- 1290 Z(A)=X(A)
- 1300 GOTO920
- 1310 K=(Z(A)+X(A))/(X(A)-X(B)-Z(B)+Z(A))
- 1320 X(A)=K*(Z(A)-Z(B))-Z(A)
- 1330 Y(A)=K*(Y(B)-Y(A))+Y(A)
- 1340 Z(A)=-X(A)
- 1350 GOTO920
- 1360 K=(Z(A)+Y(A))/(Y(A)-Y(B)-Z(B)+Z(A))
- 1370 X(A)=K*(X(B)-X(A))+X(A)
- 1380 Y(A)=K*(Z(A)-Z(B))-Z(A)
- 1390 Z(A)=-Y(A)
- 1400 GOTO920
- 1410 K=(Z(A)-Y(A))/(Y(B)-Y(A)-Z(B)+Z(A))
- 1420 X(A)=K*(X(B)-X(A))+X(A)
- 1430 Y(A)=K*(Z(B)-Z(A))+Z(A)
- 1440 Z(A)=Y(A)
- 1450 GOTO920
- 1460 IFP2=0THENRETURN
- 1470 IFZ(1)=OTHEN1540
- 1480 IFZ(5)=0THEN1540
- 1490 X(2)=X(1)/Z(1)*240
- 1500 X(4)=X(5)/Z(5)*240
- 1510 Y(2)=Y(1)/Z(1)*240
- 1520 Y(4)=Y(5)/Z(5)*240
- 1530 RETURN
- 1540 PRINT"LINE CRASHED AT PYRAMID'S BASE"
- 1550 PRINTX(1);Y(1);Z(1);" ";X(5);Y(5);Z(5)
- 1560 P2=0
- 1570 RETURN
- 1580 X(2)=INT(X(2)+.5)+240
- 1590 Y(2)=INT(Y(2)+.5)+240
- 1600 X(4)=INT(X(4)+.5)+240
- 1610 Y(4)=INT(Y(4)+.5)+240
- 1611 X0=INT(INT(X(2)+.5)*.665970772)
- 1612 Y0=INT(ABS(199-(INT(Y(2)+.5)*.41544885)))
- 1613 X1=INT(INT(X(4)+.5)*.665970772)
- 1614 Y1=INT(ABS(199-(INT(Y(4)+.5)*.41544885)))
- 1620 IFPL=1THEN:PRINT#1,"M",X(2),Y(2)
- 1621 IFPV=0ORSE=0THEN:GOTO1630
- 1624 (null)LET3,4,23," "
- 1625 (null)LET3,4,23,"X0="+STR$(X0)+" Y0="+STR$(Y0)+" X1="+STR$(X1)+" Y1="+STR$(Y1),1
- 1630 IFPL=1THEN:PRINT#1,"D",X(4),Y(4)
- 1635 IFSE=1THEN:(null)GOTO1,X0,Y0 TO X1,Y1
- 1640 RETURN
- 2000 IFPL=1THEN:PRINT#2,PN%:RETURN
- 2001 RETURN
- 3000 IFSE=1THEN:(null)LET3,2,24," F1=TEXT SCREEN F3=GRAPHIC DISPLAY ",1
- 3001 IFSE=1THEN:FORX=1TO3000:NEXT:(null)LET3,0,24," "
- 3002 IFPL=1THEN:PRINT#1,"J",0,0:PRINT#4:PRINT#4:CLOSE1:CLOSE2:CLOSE4
- 3009 END:STOP
- 4000 PRINT"[147]":PRINT"[176][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][174]"
- 4001 PRINT"[194] [194]"
- 4002 PRINT"[194] VECTOR GRAPHICS PLOTTER V 1.0 [146] [194]"
- 4003 PRINT"[194] [194]"
- 4004 PRINT"[194] WHEN DISPLAY IS FINISHED [194]"
- 4005 PRINT"[194] PRESS 1 TO END & 2 TO REPLOT [194]"
- 4011 PRINT"[194] AFTER PROGRAM ENDS USE: [194]"
- 4012 PRINT"[194] FNCT KEY 1 = GRAPHIC SCREEN [194]"
- 4013 PRINT"[194] FNCT KEY 2 = TEXT SCREEN [194]"
- 4014 PRINT"[194] [194]"
- 4015 PRINT"[173][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][189]"
- 4999 RETURN
- 5000 IFSE=1THEN:(null)NEXT2,1
- 5001 IFSE=1THEN:(null)FOR0,6,5,2,0
- 5999 RETURN
-